package com.courir.data;

import java.util.Iterator;

import lombok.Data;
import lombok.val;

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

/**
 * Eine einzelne CSV-Zeile.
 */
@Data
class CsvLine {
	/** Format des Geburtstags. */
	private static final DateTimeFormatter BirthDate = DateTimeFormat
			.forPattern("yyyy");

	/** Format der Zeitangabe. */
	private static final DateTimeFormatter Time = DateTimeFormat
			.forPattern("H:mm:ss");

	/** Iterator über die Csv-Tokens. */
	private final Iterator<String> line;

	String next() {
		return line.next();
	}

	int nextInt() {
		return Integer.parseInt(next());
	}

	Lauf nextLauf() {
		return Lauf.of(nextInt());
	}

	void skip() {
		next();
	}

	DateTime nextYear() {
		return BirthDate.parseDateTime(next());
	}

	/**
	 * altersgruppe. wird zwar berechnet, dient aber vor allem zum Ermitteln des
	 * Geschlechts das fehlt im export
	 * 
	 * @return
	 */
	Geschlecht nextGeschlecht() {
		val s = next();
		if (s.isEmpty()) {
			return Geschlecht.NA;
		}
		return Geschlecht.parse(s.charAt(0));
	}

	/**
	 * Zeit des Läufers.
	 */
	Duration nextTime() {
		val s = next();
		if (s.isEmpty()) {
			return new Duration(0);
		}
		val d = Time.parseDateTime(s);
		val clean = d.withTime(0, 0, 0, 0);
		return new Duration(clean, d);
	}
}